import time

from appium import webdriver
import unittest
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.multi_action import MultiAction
from appium.webdriver.common.touch_action import TouchAction

"""
    1、如果 想要 通过 python 编写  app 的自动化测试脚本  ，需要使用  appium 客户端的服务 以及 appium 的模块
    2、 pypi：pip install Appium-Python-Client
"""


class MyAppiumTestCase(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        desired_caps = dict(
            platformName='Android',
            deviceName='127.0.0.1:62001',
            appActivity='com.baidu.baidumaps.WelcomeScreen',
            appPackage='com.baidu.BaiduMap',
            noReset='true',
        )
        cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        # 隐式等待
        cls.driver.implicitly_wait(40)

    def test_up_left_right_down(self):
        """上下左右"""
        print('地图启动成功-----')

        # ui 定位 跳过  点击

        # 强制等待
        time.sleep(25)

        """
            1、滑动 某个坐标 出现页面 
        """
        # self.driver.swipe(363, 819, 363, 1122, 300)

        self.driver.tap([(345, 483)])

        """
            1、多点触摸 的 实现
                1、多点触摸的时候 需要 几根手指头，需要几根 就创建多少个 TouchActions
                2、将 多个手指头的 动作 添加到 MultiActions中  同步执行即可
        """

        """
            缩小操作 的 实现
        """
        # 初始化一个 执行多个手指头的 对象
        more_actions = MultiAction(self.driver)

        # 初始化多个 手指头
        one = TouchAction(self.driver)
        two = TouchAction(self.driver)

        # 缩小 或者 放大 操作 需要 从 某一个 坐标 滑动到 某一个 坐标上
        # 获得 当前 手机的  分辨率中的 坐标 值（x,y）
        window_size = self.driver.get_window_size()
        print(window_size)
        x = window_size['width']
        y = window_size['height']

        one.press(x=x * 0.2, y=y * 0.2).wait(1000).move_to(x=x * 0.4, y=y * 0.4).wait(1000).release()
        two.press(x=x * 0.8, y=y * 0.8).wait(1000).move_to(x=x * 0.6, y=y * 0.6).wait(1000).release()

        # 将 两个手指头 分别添加进 more_actions 一起执行
        more_actions.add(one)
        more_actions.add(two)

        more_actions.perform()

        time.sleep(2)
        self.driver.save_screenshot('./resources/x.png')

        time.sleep(2)
        """
            1、放大 操作 
        """
        three = TouchAction(self.driver)
        f = TouchAction(self.driver)
        three.press(x=x * 0.4, y=y * 0.4).wait(1000).move_to(x=x * 0.2, y=y * 0.2).wait(1000).release()
        f.press(x=x * 0.6, y=y * 0.6).wait(1000).move_to(x=x * 0.8, y=y * 0.8).wait(1000).release()
        more_actions.add(three, f)

        more_actions.perform()
        time.sleep(2)
        self.driver.save_screenshot('./resources/d.png')

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.quit()
        pass


if __name__ == '__main__':
    unittest.main()
